﻿using System;
using System.Collections.Generic;
using System.Text; 
namespace TuiXin
{
    public class Msg
    {
        public class Mt
        {
            public int mt { get; set; }
            public string str { get; set; }
        }
        /// <summary>
        /// 
        /// </summary>
         
        public class MT45
        {
            public int mt =45;
            public string k { get; set; }
            public int src { get; set; }
            public int v { get; set; }
            public bool ex {get; set;}
            public _info info { get; set; }
            public class _info 
            {
                public string h { get; set; }
                public string c { get; set; }
                public string t { get; set; }
                public string o { get; set; }
                public string v { get; set; }
            }
        }
        /// <summary>
        /// 服务器应答key交换包 server-->client
        /// 参数说明：
        /// k， 同45， 是服务器用来接收数据的key。
        /// d： 整数，目前取值0，1，2
        /// 0：成功
        /// 1：通信协议版本过低
        /// 2：通信协议版本过高
        /// 3: src字段错误
        /// {"mt":46,"k":"20FFC2EB10D4446AA602583D2323F8CF","d":0}
        /// </summary>
        public class MT46
        {
            public int mt = 46;
            public string k { get; set; }
            public int d { get; set; }
        }
        /// <summary>
        /// 推信设备登录  client--> server
        /// 格式描述：
        /// “dt”:  数字， 设备类型
        /// 目前定义如下， imei=0, mac=1, iccid为2，servergeneral为3 .注意： 如果下面的dev获取不到，则不需要填写该字段！
        /// “dev”: 字符串， 可显md5值（32字符长），必须大写
        /// md5为设备唯一信息， 如果有多个，则按下述规则获取一个：
        /// 先获取硬件信息（顺序为imei, mac)
        /// 在获取sim卡（顺序为iccid）
        /// 如果一个都获取不到，则在md5(dev)字段返回空字符串，同时不需要填写dt字段，服务器会生成，并且以后需要用这个登录，客户端做本地记录）
        /// ，之后md5(dev)得到此字符串。
        /// {"mt":47,"dt":0,"dev":"ABCD1234ABCD1234ABCD1234ABCD1234"}
        /// 所有指定字段必须存在，所有消息包均遵循此规律，如果用户不指定，则可以填充一个空字符串，另：有一些消息包有可变参数，即参数m可能依赖参数n来决定(参数n往往是一个整数类型，根据其值来决定后续参数m的名称和类型)，这种情况下也必须满足参数m必须依赖n的存在，不可缺失，如果客户段在一条消息中上传了无意义参数，则会被服务器忽略）
        /// </summary>
        public class MT47
        {
            public int mt = 47;
            public int dt { get; set; }
            public string dev { get; set; }
        }
        /// <summary>
        /// 48 推信设备登录返回 server-->client
        /// 格式描述 ：
        /// “d”:整数，0表示成功，否则是失败，失败还有“m”字段是失败的描述， 仅供客户端调试程序用，显示的内容以d的类型自己描述
        /// d=1 dt不合法
        /// d=2 md5不合法
        /// d=3 服务器忙，应该是通行证那里忙
        /// d=4 帐号临时锁定， 一般不会出现这种情况， 如果出现， 说明：
        /// 刚用一个设备登录时， 立刻断开socket链接， 立刻再次用这个帐号登录，
        /// 会导致帐号临时锁定， 大概会锁定最长10秒（一般1，2秒），这个时候建议
        /// 提示客户端‘帐号临时锁定，稍候登录“
        /// d=5 其他错误，一般是数据库或者通行证错误，应该显示服务器忙
        /// 对于成功的， 则有下述字段可以获取
        /// "i": 整型，用户id， 唯一性，此id在后续消息包中需要经常用上
        /// "n": 字符串，用户全名，固定为推信用户userid。
        /// "o": 字符串，用户的手机号
        /// “obd”: bool类型，手机号是否验证过（绑定）， true绑定， false没有绑定。
        /// "u": 字符串，用户的昵称，固定为tx_user_id
        /// “e”： 字符串， 用户的邮件地址。
        /// “ebd”: bool类型， 邮件地址是否验证过（绑定了）， true绑定， false没有绑定
        /// “friendmd5”： 字符串，用户好友的md5值
        /// “avatarmd5”: 字符串，自己头像的md5值。
        /// “st”： 整数， 服务器当前时间
        /// “r”:bool类型， 如果为true， 则还存在“rmd5”字段
        /// “rdt”： 整数类型，当r为true时又笑，表示服务器生成的dt, 目前此值服务器编码为3， 但不保证一定为3，
        /// 客户端应该记录这个rdt和下面的rmd5， 依样下次发送此数据就行。
        /// “rmd5”，字符串，当r为true时有效，表示服务器生成了一个devkey， 客户端需要做记录，以后的md5(dev)发送此字符串～
        /// m:返回错误信息
        /// 
        /// 
        /// 
        /// 

        /// </summary>
        public class MT48
        {
            public int mt = 48;
            public int d { get; set; }
            public int i { get; set; }
            public string n { get; set; }
            public string o { get; set; }
            public bool obd { get; set; }
            public string u { get; set; }
            public string p { get; set; }
            public string e { get; set; }
            public bool ebd { get; set; }
            public string friendmd5 { get; set; }
            public string avatarmd5 { get; set; }
            public int st { get; set; }
            public bool r { get; set; }
            public string rdt { get; set; }
            public string rmd5 { get; set; }
            public string m { get; set; }
            
        }
        public class mt48
        {
            public int mt = 48;
            public int d { get; set; } 
            public string m { get; set; }

        }
        /// <summary>
        /// 客户端输入状态 client --> server
        /// </summary>
        public class MT4
        {
            public int mt = 4;
            public int to { get; set; }
            public int d { get; set; }
        }
        /// <summary>
        /// 5 服务器转发输入法状态 server --> client
        /// </summary>
        public class MT5
        {
            public int mt = 5;
            public int from { get; set; }
            public int d { get; set; }
        }
        /// <summary>
        /// 6客户端短消息上行接口 client --> server
        /// </summary>
        public class MT6
        {
            public int mt = 6;
            public int to { get; set; }
            public int s { get; set; }
            public SM sm { get; set; }
            public class SM
            {
                public string msg { get; set; }
                public string msgid { get; set; }
            }
        }
        /// <summary>
        /// 7服务器成功收到客户端上行消息 server --> client
        /// </summary>
        public class MT7
        {
            public int mt = 7;
            public string id { get; set; }
            public int d { get; set; }
        }
        /// <summary>
        /// 8服务器短消息下行接口,转发给收件人 server --> client
        /// </summary>
        public class MT8
        {
            public int mt = 8;
            public int s { get; set; }
            public string t { get; set; }
            public int from { get; set; }
            public SM sm { get; set; }
            public class SM
            {
                public string id { get; set; }
                public string ct { get; set; }
            }
        }
        /// <summary>
        /// 9客户端收到短消息后，发送已读/未读回执 client --> server
        /// </summary>
        public class MT9
        {
            public int mt = 9;
            public int to { get; set; }
            public int s { get; set; }
            public string id { get; set; }
            public int d { get; set; }
        }
        /// <summary>
        /// 10客户端离线消息获取接口 client --> server
        /// </summary>
        public class MT10
        {
            public int mt = 10;
        }
        /// <summary>
        /// 11服务器返回离线消息列表 server --> client
        /// </summary>
        public class MT11
        {
            public int mt = 11;
            public int eof { get; set; }
            public List<MS> ms { get; set; }
            public class MS
            {
                public string t { get; set; }
                public int from { get; set; }
                public int s { get; set; }
                public SM sm { get; set; }
                public class SM
                {
                    public string id { get; set; }
                    public string ct { get; set; }
                }
            }
        }
        /// <summary>
        /// 12客户端离线回执获取接口 client --> server
        /// </summary>
        public class MT12
        {
            public int mt = 12;
        }
        /// <summary>
        /// 13服务返回离线回执列表 server --> client
        /// </summary>
        public class MT13
        {
            public int mt = 13;
            public int eof { get; set; }
            public List<RP> rp { get; set; }
            public class RP
            {
                public int to { get; set; }
                public string id { get; set; }
                public int d { get; set; }
            }
        }
        /// <summary>
        /// 14客户端上传通讯录列表 client --> server
        /// </summary>
        public class MT14
        {
            public int mt = 14;
            public List<AD> ad { get; set; }
            public class AD
            {
                public string n { get; set; }
                public string p { get; set; }
                public string e { get; set; }
            }
        }

        
    }
}
